package araujoCoronelVillamayor.plantasVsZombies.domain

import org.junit.After
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import araujoCoronelVillamayor.plantasVsZombies.appModelsArena.AtaqueAppModel
import araujoCoronelVillamayor.plantasVsZombies.appModelsArena.SesionAppModel

class TestAtaque {
	FactoryPlantas factoryPlantas
	Planta plantaShooter42_1 //ATAQUE: 4 || DEFENSA: 2
	Planta plantaGirasol15_1 //ATAQUE: 1 || DEFENSA: 5
	
	FactoryZombies factoryZombies 
	Zombie zombie14_1 //ATAQUE: 1 || DEFENSA: 4
	Zombie zombie41_1 //ATAQUE: 4 || DEFENSA: 1
	
	AtaqueAppModel ataqueAppModel
	SesionAppModel sesionAppModel
	
	@Before
	def void init() {
		sesionAppModel = new SesionAppModel
		ataqueAppModel = new AtaqueAppModel(sesionAppModel)
		
		factoryPlantas = FactoryPlantas.instance
		plantaShooter42_1 = factoryPlantas.crearShooter()//ATAQUE: 4 || DEFENSA: 2	
		plantaGirasol15_1 = factoryPlantas.crearGirasol() //ATAQUE: 1 || DEFENSA: 5
		
		factoryZombies = FactoryZombies.getInstance
		zombie14_1 = factoryZombies.crearColinBlunstone() //ATAQUE: 1 || DEFENSA: 4
		zombie41_1 = factoryZombies.crearCranberrie() //ATAQUE: 4 || DEFENSA: 1
	}
	
	@Test //(expected=typeof(Exception))
	def ataqueZombiePlanta(){
		Assert::assertEquals(2, plantaShooter42_1.poderDefensa)
		zombie14_1.ataca(plantaShooter42_1)
		Assert::assertEquals(4, zombie14_1.poderDefensa)
		Assert::assertEquals(1, plantaShooter42_1.poderDefensa)
		
		Assert::assertEquals(4, zombie14_1.poderDefensa)
		plantaShooter42_1.ataca(zombie14_1)
		Assert::assertEquals(0, zombie14_1.poderDefensa) 
		Assert::assertEquals(1, plantaShooter42_1.poderDefensa)
	}
	
	@Test
	def ataqueZombieFila(){
		
		ataqueAppModel.zombieSeleccionado = zombie14_1
		sesionAppModel.plantaSeleccionada = plantaGirasol15_1
		sesionAppModel.filaSeleccionada = sesionAppModel.jardin.getFilas.get(1)
		sesionAppModel.poner
		
		Assert::assertEquals(5, sesionAppModel.plantaSeleccionada.poderDefensa)
		Assert::assertEquals(4, ataqueAppModel.zombieSeleccionado.poderDefensa)

		ataqueAppModel.atacar(sesionAppModel.filaSeleccionada, ataqueAppModel.zombieSeleccionado)

		Assert::assertEquals(0, ataqueAppModel.zombieSeleccionado.poderDefensa)
	}
	
	@After
	def void limpiezaColecciones() {
		//Shooter::instanciasCreadas.clear
		//Girasol::instanciasCreadas.clear
	}
}